package com.tabnet.form.client;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import com.tabnet.beans.commande.Commande;
import com.tabnet.dao.DAOCommande;
import com.tabnet.dao.DAOException;
import com.tabnet.dao.DAOLigneCommande;
import com.tabnet.form.FormValidationException;

public class SupprimerProduitForm {

    public static final String PARAM_PRODUIT	= "prod";
    
    private String resultat;
    private Map<String, String> erreurs = new HashMap<String, String>();
    private DAOCommande _oDAOCommande;
    private DAOLigneCommande _oDAOLigneCommande;


    public SupprimerProduitForm( DAOLigneCommande pDAOLigneCommande, DAOCommande pDAOCommande) {
        this._oDAOCommande = pDAOCommande;
        this._oDAOLigneCommande = pDAOLigneCommande;
    }

    public Map<String, String> getErreurs() {
        return this.erreurs;
    }
    public String getResultat() {
        return this.resultat;
    }

    private void setErreur( String champ, String message ) {
        this.erreurs.put( champ, message );
    }

    /**
     * <p>Fonction supprLigneCommande<br />
     * Supprime la ligne commande du produit ayant la référence le paramètre présent dans l'URL.</p>
     * @param request : objet HttpServletRequest
     * @param pCommande : objet Commande
     * @param pIdLigne : id de la ligne commande à supprimer
     * @return une instance Produit
     */
    public void supprLigneCommande( HttpServletRequest request, Commande pCommande, int pIdLigne ) {

    	this.traiterCommande(pCommande);
    	
    	try {
            if ( this.erreurs.isEmpty() ) {
            	this._oDAOLigneCommande.delLigneCommande(pCommande.getLigneCommandes().get(pIdLigne));
            	pCommande.getLigneCommandes().remove(pIdLigne);
            	
            	if(pCommande.getLigneCommandes().size() == 0)
            		this._oDAOCommande.delCommande(pCommande.getNum());
            	
                this.resultat = "Succès de la suppression de la ligne commande.";
            }
            else
                this.resultat = "Échec de la suppression de la ligne commande.";
        }
        catch ( DAOException e ) {
        	this.setErreur( "imprévu", "Erreur imprévue lors de la suppression de la ligne commande dans la base de données." );
            this.resultat = "Échec de la suppression de la ligne commande.";
        }
    }

    /**
     * <p>Procédure traiterCommande<br />
     * Contrôle une commade</p>
     * @param pCommande: un objet Commande
     * */
    private void traiterCommande(Commande pCommande) {
        try {
            this.validationCommande( pCommande );
        }
        catch ( Exception e ) {
            this.setErreur( "REF", e.getMessage() );
        }
    }
    
    private void validationCommande(Commande pCommande) throws FormValidationException {
        if ( pCommande != null && pCommande.getNum() != null && pCommande.getNum().length() != 10)
            throw new FormValidationException( "Erreur avec le numéro d'un commande" );
    }
 

}
